package com.designmodel.observermodel;

import java.util.HashSet;
import java.util.Set;

/**
 * Created by
 *  抽象被观察者   主要是注册 取消 通知消息 给观察者方法  和推送消息的方法
 * @author touni
 * @date 2019/4/1
 * @time 16:28
 */
public abstract class AbstractSubject {

    /**
     * 定义存放observe的容器  一个被观察者可以有多个观察者
     */
    private Set<IObserver> observersSet = new HashSet<IObserver>(16);

    /**
     * 注册观察者  将观察者放入容器中
     * @param observer
     */
    public void registerObserver(IObserver observer){
        observersSet.add(observer);
    }

    /**
     * 移除观察者方法
     * @param observer
     */
    public void removeObserver(IObserver observer){
        observersSet.remove(observer);
    }

    /**
     * 将消息通知观察者的方法
     * @param message
     */
    public void notifyObserver(String message){
        for(IObserver observer:observersSet){
            observer.update(message);
        }



    }

    /**
     * 定义一个抽象推送消息的方法
     * @param message
     */
    public abstract void pushMessage(String message);
















}
